import type { CodeType, ICaptcha, IUpdateInfo, IUpdatePassword, IUserInfoVo, IUserLogin } from './types/login'
import { http } from '@/http/http'
/**
 * 登录表单
 */
export interface ILoginForm {
  mobile: string
  username: string
  password: string
  code: string
  uuid: string
}
export interface CodeForm {
  mobile: string
  type: CodeType
}
/**
 * 发送验证码
 * @returns ICaptcha 验证码
 */
export function sendMobileCode(codeForm: CodeForm) {
  return http.get<ICaptcha>('/code', codeForm)
}

/**
 * 用户登录
 * @param loginForm 登录表单
 */
export function login(loginForm: ILoginForm) {
  return http.post<IUserLogin>('/login/password', loginForm)
}
// 验证码登录
export function codeLogin(loginForm: ILoginForm) {
  return http.post<IUserLogin>('/login', loginForm)
}
/**
 * 获取用户信息
 */
export function getUserInfo() {
  return http.get<IUserInfoVo>('/user/info')
}

/**
 * 退出登录
 */
export function logout() {
  // 从本地存储中获取token
  const token = uni.getStorageSync('token')
  // 添加token到请求头
  const header = token ? { Authorization: `Bearer ${token}` } : {}
  return http.get<void>('/logout', {}, header)
}

/**
 * 修改用户信息
 */
export function updateInfo(data: IUpdateInfo) {
  return http.post('/user/updateInfo', data)
}

/**
 * 修改用户密码
 */
export function updateUserPassword(data: IUpdatePassword) {
  return http.post('/user/updatePassword', data)
}

/**
 * 获取微信登录凭证
 * @returns Promise 包含微信登录凭证(code)
 */
export function getWxCode() {
  return new Promise<UniApp.LoginRes>((resolve, reject) => {
    uni.login({
      provider: 'weixin',
      success: res => resolve(res),
      fail: err => reject(new Error(err)),
    })
  })
}

/**
 * 微信登录参数
 */

/**
 * 微信登录
 * @param params 微信登录参数，包含code
 * @returns Promise 包含登录结果
 */
export function wxLogin(data: { code: string }) {
  return http.post<IUserLogin>('/user/wxLogin', data)
}
